#include <iostream>
#include "mathexample.h"
#include "file1.h"
#include "file2.h"
#include "a.h"
#include "b.h"
using namespace std;
using namespace cn;

//宏定义 #define 宏名 宏体
#define PI 3.1415
//#define 宏名（参数表） 宏体
#define M(a,b) a*b
//#define 宏名

//条件编译
//定义宏DEBUG
#define DEBUG


/*计算n阶勒让德多项式的值的递归函数*/
double poly(int n,double x){
    if(n==0) return n;
    if(n==1) return x;
    return ((2*n-1)* poly(n-1,x)-(n-1)* poly(n-2,x))/n;
}
/*n!*/
static int count=0;
int f(int n){
    //cout<<"调用次数:"+n;

    if(n==0)
        return 1;
    else
        count+=1;
        return n*f(n-1);
}

int main() {
    /*cout<<poly(10,2)<<endl;
    cout<<f(10)<<endl;
    cout<<count<<endl;*/
   /* int n;
    cout<<"输入n的值:";
    cin>>n;
    int sum=f(n);
    cout<<n<<"的阶乘为"<<sum<<endl;*/
   //命名空间测试
   /*cout<<math::global<<endl;
   int sum=math::add(10,20);
   cout<<sum<<endl;
   int f=math::factorial(5);
    cout<<f<<endl;*/
   A::factorial(4);
   A::global=123;
   cout<<"A::global="<<A::global<<" B::global="<<B::global<<endl;
   B::global=256;
   cout<<"A::global="<<A::global<<" B::global="<<B::global<<endl;
   cout<<"A::add(3,4)="<<A::add(3,4)<<endl;
   cout<<"B::add(3,4)="<<B::add(3,4)<<endl;

   cout<<"*************************************"<<endl;
   cout<<add(10,20)<<endl;
   cout<<sub(20,10)<<endl;

   cout<<"*************************************"<<endl;
   //宏测试
   cout<<"area="<<PI*3.0*3.0<<endl;
//#undef M  //编译报错,下面编译报错

   cout<<"M="<<M(4,5)<<endl;
    int x=10,y=20;
#ifdef DEBUG  //定义了DEBUG，以下才会执行
//#ifdef RUN
    /*
     * 说明:对于#ifdef预处理指令，预编译器并不是将其后的宏名DEBUG用宏体替换
     * 而是判断该DEBUG是否被#define定义过，即是否出现过#define DEBUG
     */
   cout<<"x="<<x<<" y="<<y<<endl;
#endif
   cout<<x*y<<endl;


    return 0;
}
